Deciding Assertions in Programs with References
نویسندگان
چکیده
Modular analysis of procedures using summaries is a key technique to improve scalability of software model checking. Existing software model checkers do not fully exploit procedural structure for modular analysis. In the SLAM project, modular analysis using procedure summaries is done on a Boolean Program model, which contains only boolean types. We extend Boolean Programs to include reference types, and show that modular analysis using procedure summaries is still possible. As a consequence, we obtain an algorithm for deciding assertions in programs where the lengths of the paths in the heap are bounded, even though the heap size is potentially unbounded. Even in programs with unbounded paths in the heap, the result provides a way to separate reasoning about the finite backbone of the heap from the reasoning about unbounded data structures. We have implemented this algorithm in the ZING model checker, which supports a rich input language with references as well as concurrent threads. Our algorithm improved the performance of the model checker by 30-35% on a concurrent transaction management program with 7000 lines of code, 57 dynamic allocation sites, and several million reachable states and found a subtle concurrency bug. On parameterized examples artificially constructed to demonstrate the benefits of summarization, the algorithm improves performance asymptotically as expected. The implementation is robust —on hundreds of small examples in the SLAM and ZING regression suites, the implementation produces correct results.
منابع مشابه
Department of Philosophy - Utrecht University Dynamics
References INTRODUCTION Intriguing parallels can be observed between the execution of computer programs and the interpretation of ordinary discourse. Various elements of discourse, such as assertions, suppositions and questions, may well be compared with statements or sequences of statements in an imperative program. Let us concentrate on assertions for the moment. Stalnaker 1979 sums up some o...
متن کاملPolymorphism in Object-Oriented Contract Verification
The role that design by contract plays in the specification, monitoring, and reuse of classes is of increasing importance in the OO community. Although recognizably useful, nevertheless, because of lack of expressiveness of existing assertion languages, contracts can bring undesirable effects such as the increasing in class coupling when we deal with complex classes. A means of surpassing those...
متن کاملRegion Logic: local reasoning for Java programs and its automation
Shared mutable objects are a cornerstone of the object-oriented paradigm. The ability to share mutable data eliminates unnecessary cloning and gives rise to efficient data structures. Yet, formal reasoning about partial correctness of object-oriented programs is notoriously difficult due to the very same features, viz., sharing and mutable objects. The core problem is aliasing, and one of the c...
متن کاملSubmitted to Acm Transactions on Computer Systems Quantifying Loop Nest Locality Using Spec'95 and the Perfect Benchmarks
This paper analyzes and quantiies the locality characteristics of numerical loop nests in order to suggest future directions for architecture and software cache optimizations. Since most programs spend the majority of their time in nests, the vast majority of cache optimization techniques target loop nests. In contrast, the locality characteristics that drive these optimizations are usually col...
متن کاملUsing Fuzzy Logic in Test Case Prioritization for Regression Testing Programs with Assertions
Program assertions have been recognized as a supporting tool during software development, testing, and maintenance. Therefore, software developers place assertions within their code in positions that are considered to be error prone or that have the potential to lead to a software crash or failure. Similar to any other software, programs with assertions must be maintained. Depending on the type...
متن کامل